現象 | 根源 | 對策 |
---|---|---|
小型高頻非同步造成大量 GC | 每次非同步都配置 Task 物件 | 高同步命中改用 ValueTask 或合併多餘 await |
深層 await 堆疊膨脹 | 多層 return await 只傳遞結果 | 直接 return Task |
介面被阻塞 | 使用 .Result 等同步等待 | 呼叫鏈全面 async 函式庫端可加 ConfigureAwait(false) |
傳統環境發生死鎖 | 同步等待阻塞同步內容 | 避免同步等待 或使用 ConfigureAwait(false) |
核心概念
實驗觀察狀態
static async Task Demo()
{
Console.WriteLine("1");
await Task.Yield(); // 產生掛起
Console.WriteLine("2");
}
var t = Demo();
await t;
Console.WriteLine(t.Status); // RanToCompletion
重點在
總結就是聚焦降低額外配置,避免不必要層級,以及杜絕同步封鎖,可穩定改善非同步執行效率